package com.ios.common.util;

import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.xwork.StringUtils;

public class SysUtils {

	/**
	 * 根据格式返回当前日期，默认格式为yyyy-MM-dd
	 * 
	 * @param fmat
	 * @return
	 */
	public static String getFormatCurrentDate(String fmat) {
		if (StringUtils.isEmpty(fmat)) {
			fmat = "yyyy-MM-dd";
		}
		SimpleDateFormat format = new SimpleDateFormat(fmat);
		return format.format(new Date());
	}

	
	/***
	 * 将从数据库中查出的一条记录（Map）转换成对应的对象
	 * @param map     数据库中的一条记录
	 * @param clazz   要转换成的Class类的类对象
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static Object transMapToVo(Map<String,Object> map, Class clazz) {
		Iterator ite = map.keySet().iterator();
		Object obj = null;
		try {
			obj = clazz.newInstance();//创建一个Class类的实例
			while (ite.hasNext()) {
				String key = (String) ite.next();// map对应的key
				String[] arr = key.split("_");
				String fieldName = arr[0];// Class类中的属性名称
				for (int i = 1; i < arr.length; i++) {
					String firstStr = arr[i].substring(0, 1).toUpperCase();
					fieldName += firstStr + arr[i].substring(1);
				}
				if("class".equals(fieldName)){
					fieldName += "_";
				}
				Field field = clazz.getDeclaredField(fieldName);
				if(field==null){
					continue;
				}
				field.setAccessible(true);
				field.set(obj,map.get(key));//Class类的实例的属性赋值
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return obj;
	}
	
	/**
	 * 将从数据库中查找出的记录（Map）集合转换成Class对应的对象集合
	 * @param list    数据库的记录(Map)集合
	 * @param clazz   要转成的对象的Class类的类对象
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static List transMapListToVoList(List<Map<String,Object>> list, Class clazz){
		List rs = new ArrayList();
		if(!list.isEmpty()){
			for(int i = 0; i < list.size();i++){
				Map<String,Object> map = list.get(i);
				rs.add(SysUtils.transMapToVo(map, clazz));
			}
		}
		return rs;
	}

}
